package com.itheima.cn;

import javax.swing.*;
import java.io.*;
import java.text.DecimalFormat;

/*
        使用多线程完成，多个文件同步复制功能，并在控制台显示文件复制的进度，进度以百分比表示。
	要求：
    1. 文件拷贝使用多线程完成；
        1. 需要在控制展示文件总字节数；
        2. 需要在控制展示文件复制进度百分比；
        3. 多个文件能同时复制；

* */
public class FileDemo extends Thread {
    /*
    * 多个文件同时复制
    * 创建两到三个线程同时进行，将旧文件复制到新文件（创建新旧文件的路径）放入线程中。
    * */
    private File oldFile = null;

    private File newFile = null;
    public  FileDemo(){

    }
    public FileDemo(String oldFile,String newFile ){
       this.oldFile = new File(oldFile);
       this.newFile = new File(newFile);
    }

    @Override
    public void run() {

                BufferedInputStream  bufferedInputStream=null;
                BufferedOutputStream bufferedOutputStream=null;
        try {
            bufferedInputStream = new BufferedInputStream(new FileInputStream(oldFile));
            bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(newFile));
            byte[] bytes = new byte[1024];
            int len ;
            long lenght =  oldFile.length();
            double tp =0;
            DecimalFormat df = new DecimalFormat("##%");

            while((len =bufferedInputStream.read(bytes))!=-1){
                bufferedOutputStream.write(bytes,0,len);
                tp = tp+len;
                double temp = tp/lenght;
                String format = df.format(temp);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(bufferedInputStream!=null||bufferedOutputStream!=null){
                try {
                    bufferedInputStream.close();
                    bufferedOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
              }

            }
        }

    }

    public static void main(String[] args) {
        FileDemo fileDemo1 = new FileDemo("D:\\a.txt","D:\\b.txt");
        FileDemo fileDemo2 = new FileDemo("D:\\c.txt","D:\\d.txt");
        FileDemo fileDemo3 = new FileDemo("D:\\e.txt","D:\\f.txt");
        fileDemo1.start();
        fileDemo2.start();
        fileDemo3.start();
    }
}
